package org.vaadin.addon.oauthpopup.demo;
import javax.servlet.annotation.WebServlet;
import org.scribe.builder.api.FacebookApi;
import org.scribe.builder.api.LinkedInApi;
import org.scribe.builder.api.TwitterApi;
import org.vaadin.addon.oauthpopup.OAuthListener;
import org.vaadin.addon.oauthpopup.OAuthPopupButton;
import org.vaadin.addon.oauthpopup.OAuthPopupOpener;
import org.vaadin.addon.oauthpopup.buttons.FacebookButton;
import org.vaadin.addon.oauthpopup.buttons.GitHubApi;
import org.vaadin.addon.oauthpopup.buttons.GitHubButton;
import org.vaadin.addon.oauthpopup.buttons.LinkedInButton;
import org.vaadin.addon.oauthpopup.buttons.TwitterButton;
import com.vaadin.annotations.PreserveOnRefresh;
import com.vaadin.annotations.Push;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.ExternalResource;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Link;
import com.vaadin.ui.NativeButton;
import com.vaadin.ui.Notification;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.themes.BaseTheme;
@Push
@PreserveOnRefresh
@Theme("demo")
@SuppressWarnings("serial")
public class DemoUI extends UI {
@WebServlet(value = "/*", asyncSupported = true)
@VaadinServletConfiguration(productionMode = false, ui = DemoUI.class, widgetset = "org.vaadin.addon.oauthpopup.demo.DemoWidgetSet")
public static class Servlet extends VaadinServlet {
}
// Twitter test application at http://localhost:8080
private static final ApiInfo TWITTER_API = new ApiInfo("Twitter",
TwitterApi.class,
"31ssXGMU4WW6KPxWwT6IMQ",
"FR3wJmGyGAdpQMxB3vMreED2UnsHVb6nPF16f1RrtU",
"https://api.twitter.com/1.1/account/settings.json");
// Facebook test application at http://localhost:8080
private static final ApiInfo FACEBOOK_API = new ApiInfo("Facebook",
FacebookApi.class,
"170732353126405",
"dd59293cda395bf38a88044c22937e7e",
"https://graph.facebook.com/me");
// LinkedIn test application at http://localhost:8080
private static final ApiInfo LINKEDIN_API = new ApiInfo("LinkedIn",
LinkedInApi.class,
"bp0aa1rxk2re",
"Q2Na42cZmVs3OWnI",
"https://api.linkedin.com/v1/people/~");
private static final ApiInfo GITHUB_API = new ApiInfo("GitHub",
GitHubApi.class,
"97a7e251c538106e7922",
"6a36b0992e5e2b00a38c44c21a6e0dc8ae01d83b",
"https://api.github.com/user");
private final VerticalLayout layout = new VerticalLayout();
@Override
protected void init(VaadinRequest request) {
layout.setMargin(true);
layout.setSpacing(true);
setContent(layout);
addTwitterButton();
addFacebookButton();
addLinkedInButton();
addGitHubButton();
addTwitterNativeButton();
layout.addComponent(new Link("Add-on at Vaadin Directory", new ExternalResource("http://vaadin.com/addon/oauth-popup-add-on")));
layout.addComponent(new Link("Source code at GitHub", new ExternalResource("https://github.com/ahn/vaadin-oauthpopup")));
}
private void addTwitterButton() {
ApiInfo api = TWITTER_API;
OAuthPopupButton button = new TwitterButton(api.apiKey, api.apiSecret);
addButton(api, button);
}
private void addFacebookButton() {
ApiInfo api = FACEBOOK_API;
OAuthPopupButton button = new FacebookButton(api.apiKey, api.apiSecret);
addButton(api, button);
}
private void addLinkedInButton() {
ApiInfo api = LINKEDIN_API;
OAuthPopupButton button = new LinkedInButton(api.apiKey, api.apiSecret);
addButton(api, button);
}
private void addGitHubButton() {
ApiInfo api = GITHUB_API;
OAuthPopupButton button = new GitHubButton(api.apiKey, api.apiSecret);
addButton(api, button);
}
private void addTwitterNativeButton() {
final NativeButton b = new NativeButton("Another Twitter Auth Button");
OAuthPopupOpener opener = new OAuthPopupOpener(
TWITTER_API.scribeApi,
TWITTER_API.apiKey,
TWITTER_API.apiSecret);
opener.extend(b);
opener.addOAuthListener(new OAuthListener() {
@Override
public void authSuccessful(String accessToken,
String accessTokenSecret, String oauthRawResponse) {
Notification.show("authSuccessful");
}
@Override
public void authDenied(String reason) {
Notification.show("authDenied");
}
});
layout.addComponent(b);
}
private void addButton(final ApiInfo service, OAuthPopupButton button) {
// In most browsers "resizable" makes the popup
// open in a new window, not in a tab.
// You can also set size with eg. "resizable,width=400,height=300"
button.setPopupWindowFeatures("resizable,width=400,height=300");
HorizontalLayout hola = new HorizontalLayout();
hola.setSpacing(true);
hola.addComponent(button);
layout.addComponent(hola);
button.addOAuthListener(new Listener(service, hola));
}
private class Listener implements OAuthListener {
private final ApiInfo service;
private final HorizontalLayout hola;
private Listener(ApiInfo service, HorizontalLayout hola) {
this.service = service;
this.hola = hola;
}
@Override
public void authSuccessful(final String accessToken,
final String accessTokenSecret, String oauthRawResponse) {
hola.addComponent(new Label("Authorized."));
Button testButton = new Button("Test " + service.name + " API");
testButton.addStyleName(BaseTheme.BUTTON_LINK);
hola.addComponent(testButton);
testButton.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
GetTestComponent get = new GetTestComponent(service,
accessToken, accessTokenSecret);
Window w = new Window(service.name, get);
w.center();
w.setWidth("75%");
w.setHeight("75%");
addWindow(w);
}
});
}
@Override
public void authDenied(String reason) {
hola.addComponent(new Label("Auth failed."));
}
}
}